package com.itany.corejava.code16_反射;

import java.lang.annotation.*;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年12月18日 16:21
 */

// 定义注解的作用域, 表示该注解可以使用的位置, 通过value属性值指定当前作用域
// @Target注解的值如果只有一个，直接指定一个，value=可以省略
// @Target(value= ElementType.FIELD)

// @Target注解的值如只有多个，直接使用数组，value=可以省略
// @Target(value= {ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})

@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SomeAnnotation {

    //定义注解属性适合，每一个属性对应一个抽象方法，虽然是一个抽象方法，但是我们认为它是属性的作用，default设置默认值
    //当使用该注解的时候，如果没有指定属性赋值，则使用默认值
    // 如果所有的注解都有默认值，在使用注解的时候可以不指定任何属性
    // 但是如果有任意一个没有设置默认值，在使用时必须指定对应属性的值

    String name() default "aa";
    String[] value() default {"Hello","world"};
    int age() default 30;
}
